home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac 1993 September / September 93.iso / Archives / Utilities / System / FKey / FKeys / rotate FKEY / RotateMF7.c < prev   
Encoding:
C/C++ Source or Header  |  1991-05-23  |  1.9 KB  |  62 lines  |  [TEXT/KAHL]

  1. #define kTrapNumberMask                        0x07FF
  2. #define kUnimplementedTrapWord        0xA89F
  3.  
  4. static long myGetTrapAddress ( short trapWord ) {
  5.     if ( trapWord & 0x0800 )
  6.         return ( NGetTrapAddress ( trapWord & kTrapNumberMask, ToolTrap ) );
  7.     else
  8.         return ( NGetTrapAddress ( trapWord & kTrapNumberMask, OSTrap ) );
  9. }
  10.  
  11. static void mySetTrapAddress ( long proc, short trapWord ) {
  12.     if ( trapWord & 0x0800 )
  13.         NSetTrapAddress ( proc, trapWord & kTrapNumberMask, ToolTrap );
  14.     else
  15.         NSetTrapAddress ( proc, trapWord & kTrapNumberMask, OSTrap );
  16. }
  17.  
  18. static Boolean myTrapAvail ( short trapWord ) {
  19.     return (    myGetTrapAddress ( trapWord ) !=
  20.                         myGetTrapAddress ( kUnimplementedTrapWord )        );
  21. }
  22.  
  23. pascal void main ( void ) {
  24.     ProcessSerialNumber     scanPSN, frontPSN;
  25.     ProcessInfoRec                pir;
  26.     OSErr                                    err;
  27.     Boolean                                same;
  28.     long                                    attr;
  29.     char                                     *copyright =    "••• This program is © 1991 Pete Gontier, "
  30.                                                                             "All Rights Reserved. "
  31.                                                                             "Free distribution encouraged. •••";
  32.  
  33.     if ( ! myTrapAvail ( _GestaltDispatch ) ) err = true;
  34.     else {
  35.         if ( ! ( err = Gestalt ( gestaltOSAttr, &attr ) ) )
  36.         if ( ( 1 << gestaltLaunchControl ) & attr ) {
  37.             pir.processInfoLength        = sizeof ( ProcessInfoRec );
  38.             pir.processName                    = nil;
  39.             pir.processAppSpec            = nil;
  40.         
  41.             if ( ! ( err = GetFrontProcess ( &frontPSN ) ) ) {
  42.                 scanPSN = frontPSN;
  43.                 do {
  44.                     err = GetNextProcess ( &scanPSN );
  45.         
  46.                     if ( err == procNotFound ) {
  47.                         scanPSN.lowLongOfPSN = scanPSN.highLongOfPSN = 0;
  48.                         if ( err = GetNextProcess ( &scanPSN ) ) break;
  49.                     } else if ( err ) break;
  50.         
  51.                     if ( ! ( err = SameProcess ( &frontPSN, &scanPSN, &same ) ) ) {
  52.                         if ( same ) break;
  53.                         if ( ! ( err = GetProcessInformation ( &scanPSN, &pir ) ) )
  54.                         if ( ! ( pir.processMode & modeOnlyBackground ) )
  55.                         if ( ! ( err = SetFrontProcess ( &scanPSN ) ) ) break;
  56.                     }
  57.                 } while ( ! err );
  58.             }
  59.         }
  60.     }
  61.     if ( err ) SysBeep ( 10 );
  62. }